package com.hig.utils;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

public class TreeUtils {

    /**
     * 构建树形结构
     *
     * @param nodes 所有节点列表
     * @param rootId 根节点的父ID
     * @return 树形结构的列表
     */
    public static List<TreeNode> buildTree(List<TreeNode> nodes, Long rootId) {
        // 找到所有根节点
        List<TreeNode> rootNodes = nodes.stream()
                .filter(node -> node.getParentId().equals(rootId))
                .collect(Collectors.toList());

        // 递归构建子节点
        for (TreeNode rootNode : rootNodes) {
            rootNode.setChildren(getChildren(rootNode, nodes));
        }

        return rootNodes;
    }

    /**
     * 递归获取子节点
     *
     * @param parent 父节点
     * @param nodes 所有节点列表
     * @return 子节点列表
     */
    private static List<TreeNode> getChildren(TreeNode parent, List<TreeNode> nodes) {
        List<TreeNode> children = nodes.stream()
                .filter(node -> node.getParentId().equals(parent.getId()))
                .collect(Collectors.toList());

        for (TreeNode child : children) {
            child.setChildren(getChildren(child, nodes));
        }

        return children;
    }
}
